/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.trandio.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.NamingException;
import org.trandio.model.SedeVO;
import org.trandio.util.ConexionDb;


/**
 *
 * @author root
 */
public class SedeDAO implements SedeInterface {
    
      @Override
    public List<SedeVO> obtenerSede() throws NamingException, SQLException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        List<SedeVO> listSede = new ArrayList<SedeVO>();

        String sql="select * from tb_sede";

         PreparedStatement stmt = conn.prepareStatement(sql);

         try{
         ResultSet res = stmt.executeQuery();
         try{
            while (res.next()) {
                SedeVO sedeVO = new SedeVO();
                sedeVO.setId(res.getInt("id"));
                sedeVO.setCodigo(res.getString("codigo"));
                sedeVO.setDescripcion(res.getString("descripcion"));
                sedeVO.setEstado(res.getString("estado"));
                sedeVO.setCodigoprestador(res.getString("codigo_prestador"));
                sedeVO.setId_prestador(res.getInt("id_prestador"));
                listSede.add(sedeVO);
            }
            }finally{
             res.close();
         }
         }finally{
             stmt.close();
             if (!conn.isClosed())
               conn.close();
         }
        return listSede;
    }

    

    @Override
    public List<SedeVO> consultarSede(String codigo, String descripcion, int firstRow, int rowsPerPage, String sortField, boolean sortAscending) throws SQLException, NamingException {

        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String condicion = "";


        if(codigo!=null){
        if(!codigo.equals("")){
            condicion = " WHERE tb_sede.codigo = '"+codigo+"'";
        }
        }

        if(descripcion!=null){
        if(!descripcion.equals("")){
            condicion = " WHERE tb_sede.descripcion like '%"+descripcion+"%'";
        }
        }


        List<SedeVO> listSedeVO = new ArrayList<SedeVO>();
        String sql = "SELECT " +
                      "tb_sede.id,"+
                      "tb_sede.codigo,"+
                      "tb_sede.descripcion,"+
                      "tb_sede.estado,"+
                      "tb_sede.codigo_prestador,"+
                      "tb_sede.id_prestador"+
                      " FROM tb_sede "+condicion+" LIMIT "+rowsPerPage+" OFFSET "+firstRow;

        System.out.println("Sql BUSCAR sede: "+sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    SedeVO sedeVO = new SedeVO();
                    sedeVO.setId(res.getInt("id"));
                    sedeVO.setCodigo(res.getString("codigo"));
                    sedeVO.setDescripcion(res.getString("descripcion"));
                    sedeVO.setEstado(res.getString("estado"));
                    sedeVO.setCodigoprestador(res.getString("codigo_prestador"));
                    sedeVO.setId_prestador(res.getInt("id_prestador"));
                    listSedeVO.add(sedeVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed())
               conn.close();
        }

        return listSedeVO;
    }

    @Override
    public int count() throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();
        int count = 0;

        String sql = "SELECT count(*) FROM tb_sede";

            PreparedStatement stmt = conn.prepareStatement(sql);
            ResultSet res = stmt.executeQuery();
            if (res.next()) {
                count = res.getInt(1);
            }


        return count;
    }

  @Override
    public SedeVO getSede(int id) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        SedeVO sedeVO;
        sedeVO = null;
        String sql = "SELECT id, codigo, descripcion,estado, codigo_prestador, id_prestador"+
                     " FROM tb_sede"+
                     " WHERE tb_sede.id ="+id;

        System.out.println("Sql buacar sede ID: "+sql);
        PreparedStatement stmt = conn.prepareStatement(sql);
       
        try{
        ResultSet res = stmt.executeQuery();
        try{

        if (res.next()) {
                sedeVO = new SedeVO();
                sedeVO.setId(res.getInt("id"));
                sedeVO.setCodigo(res.getString("codigo"));
                sedeVO.setDescripcion(res.getString("descripcion"));
                sedeVO.setEstado(res.getString("estado"));
                sedeVO.setCodigoprestador(res.getString("codigo_prestador"));
                sedeVO.setId_prestador(res.getInt("id_prestador"));
            }
        }finally{
         res.close();
        }
        }finally{
         stmt.close();
         if (!conn.isClosed())
               conn.close();
        }
        return sedeVO;
    }

    @Override
    public void guardarSedeEdit(SedeVO sedeVO) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sql = "UPDATE tb_sede"+
                     " SET codigo=?, descripcion=?, estado=?"+
                     " WHERE tb_sede.id="+sedeVO.getId();
                System.out.println("SQL del Update sede="+sql);
		PreparedStatement stmt = conn.prepareStatement(sql);
                stmt.setString(1,sedeVO.getCodigo());
                stmt.setString(2,sedeVO.getDescripcion());
                stmt.setString(3,sedeVO.getEstado());
                stmt.execute();
		stmt.close();
    }

    @Override
    public int guardarSede(SedeVO sedeVO) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();
        System.out.println("INSERTAR SEDE");
        String sqlAdiciona  ="INSERT INTO tb_sede("+
            "codigo, descripcion, estado) "+
            "VALUES (?,?,?) RETURNING id;";
        PreparedStatement stmt = conn.prepareStatement(sqlAdiciona);    
        stmt.setString(1,sedeVO.getCodigo());
        stmt.setString(2,sedeVO.getDescripcion());
        stmt.setString(3,sedeVO.getEstado());
        ResultSet rs = stmt.executeQuery();
        rs.next();
        int resp = rs.getInt(1);
        System.out.println("Insert Generar: "+resp);

        rs.close();
	stmt.close();
        if (!conn.isClosed())
               conn.close();
        return resp;
    }


}